3D Secure 2 permite el envío de un conjunto de datos mucho mayor que su predecesor. Cuantos más datos se envíen, más información tendrá el Emisor al tomar la decisión de si la autenticación de la transacción debe realizarse a través de un flujo sin fricción o de desafío.
Los tipos de datos disponibles para enviar incluyen:
<?php
// Imports necesarios para realizar una aturoización
require_once('vendor/autoload.php');
use AddonPayments\Api\Entities\Address;
use AddonPayments\Api\Entities\Enums\AddressType;
use AddonPayments\Api\ServicesConfig;
use AddonPayments\Api\HostedPaymentConfig;
use AddonPayments\Api\Entities\HostedPaymentData;
use AddonPayments\Api\Entities\Enums\HppVersion;
use AddonPayments\Api\Entities\Exceptions\ApiException;
use AddonPayments\Api\Services\HostedService;
// Configuración del terminal
$config = new ServicesConfig();
$config->merchantId = "Merchant_ID";
$config->accountId = "Sub_Account";
$config->sharedSecret = "Shared_Secret";
$config->serviceUrl = "URL";
$config->hostedPaymentConfig = new HostedPaymentConfig();
$config->hostedPaymentConfig->version = HppVersion::VERSION_2;
$service = new HostedService($config);
// Añadimos los campos obligatorios de 3DS2 de dirección de facturación
$billingAddress = new Address();
$billingAddress->streetAddress1 = "Dirección de facturación 1";
$billingAddress->streetAddress2 = "Dirección de facturación 2";
$billingAddress->streetAddress3 = "Dirección de facturación 3";
$billingAddress->city = "Ciudad de facturación";
$billingAddress->postalCode = "Código postal de facturación";
$billingAddress->country = "País de facturación";
// Añadimos los campos obligatorios de 3DS2 de dirección de envío
$shippingAddress = new Address();
$shippingAddress->streetAddress1 = "Dirección de envío 1";
$shippingAddress->streetAddress2 = "Dirección de envío 2";
$shippingAddress->streetAddress3 = "Dirección de envío 3";
$shippingAddress->city = "Ciudad de envío";
$shippingAddress->state = "Código ISO del país de envío";
$shippingAddress->postalCode = "Código postal de envío";
$shippingAddress->country = "País de envío";
// Añadimos los campos obligatorios de 3DS2 del cliente
$hostedPaymentData = new HostedPaymentData();
$hostedPaymentData->customerEmail = "customer@email.com";
$hostedPaymentData->customerPhoneMobile = "34|914353028";
$hostedPaymentData->addressesMatch = True;
// Datos adicionales
$hostedPaymentData->challengeRequest = "NO_PREFERENCE";
$hostedPaymentData->customerWorkNumber = "44|07123456789";
$hostedPaymentData->accountAgeDate = "20190110";
$hostedPaymentData->accountAgeIndicator = "NO_ACCOUNT";
$hostedPaymentData->accountChangeDate = "20190128";
$hostedPaymentData->customerHomeNumber = "44|07123456789";
$hostedPaymentData->accountChangeIndicator = "THIS_TRANSACTION";
$hostedPaymentData->accountPassChangeDate = "20190115";
$hostedPaymentData->accountPassChangeIndicator = "THIS_TRANSACTION";
$hostedPaymentData->accountPurchaseCount = "3";
$hostedPaymentData->transactionType = "GOODS_SERVICE_PURCHASE";
$hostedPaymentData->cardholderAccountIdentifier = "1f0aae6b-0bac-479f-9ee5-29b9b6cf3aa0";
$hostedPaymentData->suspiciousActivity = "SUSPICIOUS_ACTIVITY";
$hostedPaymentData->provisionAttemptsDay = "1";
$hostedPaymentData->paymentAccountAge = "201901101";
$hostedPaymentData->paymentAccountAgeIndicator = "NO_ACCOUNT";
$hostedPaymentData->deliveryEmail = "deliveryemail@email.com";
$hostedPaymentData->deliveryTimeframe = "TWO_DAYS_OR_MORE";
$hostedPaymentData->shipIndicator = "UNVERIFIED_ADDRESS";
$hostedPaymentData->shippingAddressUsage = "20190128";
$hostedPaymentData->shippingAddressUsageIndicator = "THIS_TRANSACTION";
$hostedPaymentData->shippingNameIndicator = "TRUE";
$hostedPaymentData->preorderDate = "20190212";
$hostedPaymentData->reorderItemIndicator = "FIRST_TIME_ORDER";
$hostedPaymentData->transactionActivityDay = "1";
$hostedPaymentData->transactionActivityYear = "3";
$hostedPaymentData->giftCardAmount = "250";
$hostedPaymentData->giftCardCount = "1";
$hostedPaymentData->giftCardCurrency = "EUR";
$hostedPaymentData->recurringMaxInstallments = "5";
$hostedPaymentData->recurringExpiry = "20190205";
$hostedPaymentData->recurringFrequency = "25";
$hostedPaymentData->priorTransAuthMethod = "FRICTIONLESS_AUTHENTICATION";
$hostedPaymentData->priorTransAuthIdentifier = "26c3f619-39a4-4040-bf1f-6fd433e6d615";
$hostedPaymentData->priorTransAuthTimestamp = "20190110125733";
$hostedPaymentData->priorTransAuthData = "string";
$hostedPaymentData->cardLoginAuthType = "MERCHANT_SYSTEM_AUTHENTICATION";
$hostedPaymentData->cardLoginAuthTimestamp = "20180613110212";
$hostedPaymentData->cardLoginAuthData = "string";
$hostedPaymentData->whiteListStatus = "False";
// Lanzamos la petición al servidor de Addon Payments
try {
$hppJson = $service->charge(20)
->withCurrency("EUR")
->withHostedPaymentData($hostedPaymentData)
->withAddress($billingAddress, AddressType::BILLING)
->withAddress($shippingAddress, AddressType::SHIPPING)
->serialize();
// Mostramos el formulario
echo $hppJson;
} catch (ApiException $e) {
// Añada aquí su tratamiento de errores
echo $e->getMessage();
}
?>
Puede ver todos los valores permitidos para cada propiedad en nuestra lista actualizada de parámetros.
En este punto, el Emisor analizará la transacción. Tendrá en cuenta factores como los datos que su aplicación ha proporcionado junto con el comportamiento histórico del cliente y el análisis de transacciones. El resultado de este proceso determinará si el Emisor decide que el cliente debe autenticar aún más la transacción y realizar una comprobación con el ACS (flujo con fricción).
En un flujo sin fricciones, el Emisor puede determinar que no se requiere autenticación adicional, que la transacción puede continuar. O en base a la información que ha recibido hasta ahora, que la transacción no debería continuar.
En un escenario de transacción bloqueada, Addon Payments devolverá un mensaje de respuesta de falla a su aplicación/sitio web y puede optar por redirigir al cliente a la página de pago mientras le informa del resultado. De lo contrario, el HPP completará el proceso de autenticación y procederá a la autorización, incluidos los datos de autenticación de 3D Secure.
En el caso de un flujo de fricción, el Emisor ha determinado que el cliente debe autenticar aún más la transacción. El HPP mostrará el Emisor ACS al cliente. El desafío puede implicar una serie de pasos, incluido que el cliente ingrese una contraseña de un solo uso enviada a su teléfono o responda algunas preguntas que solo él sabría responder.
El Emisor ACS determinará el tipo de desafío que se mostrará al cliente y se alineará con al menos dos elementos de la autenticación sólida del cliente (SCA):
En el entorno sandbox (pruebas), Addon Payments proporciona un simulador de Emisor ACS que le permite probar diferentes resultados de desafíos.
Una vez que se haya cargado el desafío, después de diez segundos, el simulador completará automáticamente la autenticación y generará una respuesta de Autenticación exitosa (transStatus = “Y”). Esto tiene la intención de imitar un escenario en el que un cliente ha recibido una notificación en su teléfono para autenticarse usando su aplicación bancaria.
Para simular una autenticación fallida, hacer clic en el botón "Cancelar" generará una respuesta fallida (transStatus = “N”). En cualquier escenario, el resultado se enviará en el mensaje de respuesta de desafío (CRes) al punto final de notificación de desafío.
Con el cliente en el ACS, pueden ocurrir los siguientes resultados:
Si el cliente ha completado con éxito el desafío y se ha autenticado, Addon Payments procederá a la autorización e incluirá los datos de autenticación de 3D Secure. Alternativamente, en un escenario de transacción bloqueada, HPP devolverá un mensaje de respuesta de fallo (110).
En este punto, tanto en escenarios sin fricciones como en escenarios de desafío, la transacción puede autorizarse o declinarse de manera normal en función de si el cliente tiene fondos suficientes en su cuenta o si ingresó su código de seguridad correctamente, etc. Addon Payments devolverá la respuesta de la transacción junto con los datos de autenticación de 3D Secure adicionales que puede capturar en su sitio web/aplicación.
Para poder procesar la transacción con el formulario de ejemplo, debe modificar el archivo "Authorization.php" que se encuentra en la ruta "vendor\addonpayments\php-sdk\test\php\HPP\05 - 3DS2\01 - Autorización".
Debe introducir sus datos de configuración tal y como se muestra en el punto 2.1 de esta guía.
El siguiente formulario le permite enviar una operación contra el entorno de pruebas de Addon Payments.